Skip to main content

πŸ”΅πŸŸ’ Blue-Green Deployment with AWS ALB & Jenkins

This document explains Blue-Green Deployment using AWS ALB, EC2, Target Groups, VPC design, NAT Gateway strategy, and Jenkins automation with practical examples and real-world notes. πŸš€


πŸ” Blue-Green Deployment & Sticky Sessions​

⚠️ Why Sticky Sessions Are Disabled​

In Blue-Green deployments, it is recommended to disable sticky sessions.

πŸ”΄ Problem if enabled:

  • If DB schema changes (e.g., a new column is added)
  • Users stuck on the old target group (Blue) via sticky session
  • The old app won’t understand the new DB column
  • This can cause runtime errors ❌

βœ… Best Practice:

  • Keep applications stateless
  • Disable stickiness during traffic switch

πŸ“ When Sticky Sessions Are Still Used​

In some practical scenarios (especially on JB / App servers):

  • Keeping temporary files
  • Running grep on logs
  • Downloading reports

πŸ‘‰ In such cases, sticky sessions may be used intentionally, but NOT during Blue-Green traffic switching.


🌐 VPC CIDR Strategy (AWS)​

πŸ“¦ VPC Overview​

  • VPC CIDR: 10.0.0.0/16
  • Total IPs: 65,536

πŸ—‚οΈ Subnet Design​

PurposeCIDRAZNotes
🌍 Public Subnet 110.0.0.0/24ap-south-1aALB & NAT Gateway
🌍 Public Subnet 210.0.1.0/24ap-south-1bALB & NAT Gateway
🌍 Public Subnet 310.0.2.0/24ap-south-1cOptional AZ
πŸ–₯️ Private Subnet 110.0.10.0/24ap-south-1aApp servers
πŸ–₯️ Private Subnet 210.0.11.0/24ap-south-1bApp servers
πŸ–₯️ Private Subnet 310.0.12.0/24ap-south-1cOptional AZ
πŸ—„οΈ DB Subnet 110.0.20.0/24ap-south-1aRDS / DB Tier
πŸ—„οΈ DB Subnet 210.0.21.0/24ap-south-1bRDS / DB Tier

⚠️ AWS Reserved IPs (Per Subnet)​

AWS reserves 5 IP addresses in every subnet:

  1. Network address (all 0s)
  2. VPC router address (.1)
  3. AWS DNS address (.2)
  4. Reserved for future use
  5. Broadcast address (all 1s – reserved even though AWS doesn’t support broadcast)

🌍 NAT Gateway Explained​

πŸ”Ή What a NAT Gateway Does​

Allows private subnets to access the internet outbound (OS updates, package downloads, APIs) without inbound exposure.

πŸ’° Cost: Hourly + Data processed


🧩 NAT Gateway Options​

1️⃣ None​

βœ”οΈ Use when:

  • Fully isolated workloads
  • No internet access required

❌ Risk:

  • No package updates
  • No external API access

2️⃣ Single NAT Gateway (1 AZ)​

βœ”οΈ Pros:

  • Cheaper πŸ’Έ

❌ Cons:

  • Single point of failure

βœ”οΈ Use for:

  • Dev / Test environments

3️⃣ NAT Gateway Per AZ βœ… (Production)​

βœ”οΈ Pros:

  • High Availability
  • Lower cross-AZ traffic cost

❌ Cons:

  • Higher cost

πŸ’‘ Rule of Thumb​

EnvironmentRecommendation
πŸ§ͺ Dev / Test1 NAT Gateway
🏭 ProductionNAT Gateway per AZ
πŸ”’ IsolatedNo NAT Gateway

πŸ” Security Group Setup​

πŸ“˜ Concept​

Controls inbound & outbound traffic for EC2 and ALB.

πŸ› οΈ Practical Setup​

  • Name: blue-green-sg
  • VPC: Blue-Green VPC

πŸ”½ Inbound Rules​

PortSourcePurpose
800.0.0.0/0HTTP
4430.0.0.0/0HTTPS
22Your IPSSH

πŸ”Ό Outbound Rules​

  • Allow all traffic

πŸ–₯️ Launch EC2 Instances (Blue & Green)​

πŸ”΅ Blue Server User Data​

#!/bin/bash
apt update && apt install -y nginx
echo "<h1>Blue Version</h1>" > /var/www/html/index.html
systemctl enable nginx && systemctl start nginx

🟒 Green Server User Data​

#!/bin/bash
apt update && apt install -y nginx
echo "<h1>Green Version</h1>" > /var/www/html/index.html
systemctl enable nginx && systemctl start nginx

🎯 Target Groups & Traffic Switching​

  • Create two target groups:

    • πŸ”΅ Blue Target Group
    • 🟒 Green Target Group
  • Attach EC2 instances accordingly

  • Switch traffic by changing ALB listener rules


πŸ§ͺ AWS CLI Commands​

πŸ” Describe Listeners​

aws elbv2 describe-listeners --load-balancer-arn <LB-ARN>

πŸ” Describe Target Groups​

aws elbv2 describe-target-groups --names Blue Green

πŸ” Switch Traffic (Blue β†’ Green)​

aws elbv2 modify-listener \
--listener-arn <LISTENER-ARN> \
--default-actions Type=forward,TargetGroupArn=<GREEN-TG-ARN>

πŸ” Rollback (Green β†’ Blue)​

aws elbv2 modify-listener \
--listener-arn <LISTENER-ARN> \
--default-actions Type=forward,TargetGroupArn=<BLUE-TG-ARN>

πŸ€– Jenkins Pipeline – Blue-Green Switch​

πŸŽ›οΈ Parameter-Based Traffic Switch​

pipeline {
agent any
parameters {
choice(name: 'TARGET_GROUP', choices: ['Blue', 'Green'], description: 'Select traffic target')
}
stages {
stage('Verify Health Before Switch') {
when { expression { params.TARGET_GROUP == 'Green' } }
steps {
script {
echo "Checking Green target health..."
}
}
}
stage('Switch Traffic') {
steps {
echo "Switching traffic..."
}
}
}
}

βš–οΈ Weighted Traffic Switching (Canary Style)​

πŸ” Get Listener ARN​

aws elbv2 describe-listeners \
--load-balancer-arn <LB-ARN> \
--query 'Listeners[*].ListenerArn' \
--output text

πŸ€– Jenkins Pipeline – Weighted Routing​

pipeline {
agent any
parameters {
string(name: 'BLUE_WEIGHT', defaultValue: '1', description: 'Blue TG weight')
string(name: 'GREEN_WEIGHT', defaultValue: '0', description: 'Green TG weight')
}
stages {
stage('Switch Traffic Weights') {
steps {
script {
echo "Updating traffic weights..."
}
}
}
}
}

🧠 Key Takeaways​

  • πŸ”΅πŸŸ’ Blue-Green avoids downtime
  • 🚫 Disable sticky sessions during switch
  • 🌐 Proper VPC & NAT design is critical
  • βš–οΈ Weighted routing enables safe canary releases
  • πŸ€– Jenkins automates traffic control